package main.java.br.com.projeto.domain.dao;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import main.java.br.com.projeto.domain.entity.ContaReceber;

public class DaoContaReceber extends Dao<ContaReceber>{

	/**
	 * 
	 */
	private static final long serialVersionUID = 3663433094741585910L;

	public DaoContaReceber() {
		super(ContaReceber.class);
	}
	
	public List<ContaReceber> listByVenda (Long numeroNota, String numeroSerie)
	{ 
		String hql = "select ContaReceber from ContaReceber contaReceber "
				+ "inner join contaReceber.venda venda "
				+ "where venda.numeroNota = :numeroNota " 
				+ "and venda.numeroSerie = :numeroSerie ";

		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("numeroNota", numeroNota);
		parameters.put("numeroSerie", numeroSerie);

		return this.findOneResult(hql, parameters);
	}
	
	public List<ContaReceber> listByFilter(Long id, String cliente, Date dataVencimento)
	{
		String hql = "select contaReceber from ContaReceber contaReceber "
				+ "inner join contaReceber.cliente cliente "
				+ "where contaReceber.id = :id or :id = 0 "
				+ "and (lower(cliente.nome) like '%' || lower ( cast(:cliente as string) ) || '%' or :cliente = null) "
				+ "and (contaReceber.dataVencimento <= :dataVencimento or cast(:dataVencimento as date) = null)";

		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("id", id);
		parameters.put("cliente", cliente);
		parameters.put("dataVencimento", dataVencimento);

		return this.findOneResult(hql, parameters);
	}
	
	public List<ContaReceber> listByOrdemServico(Long numOS)
	{
		String hql = "select ContaReceber from ContaReceber contaReceber "
				+ "inner join contaReceber.ordemServico ordemServico "
				+ "where ordemServico.numOs = :numOS";

		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("numOS", numOS);

		return this.findOneResult(hql, parameters);
	}
}
